<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>

<script>
    /* 
    1. 在数组原型上定义一个数组添加元素的方法，类似于push()
2. 在数组原型上定义一个删除数组头部元素的方法，类似于shift()
3. 在数组原型上定义一个求数组最大值和最小值的方法
6. 给数组原型添加检测一个元素在不在数组里面的方法
7. 给数组原型定义一个新的数组方法用于将数组小写字符转为大写字符
8. 通过原型方式，自定义一方法，实现字符串的截取功能，类似slice()
9、封装一个函数实现以下格式字符串的转换
比如：howAreYou   ->how-are-you
    how-are-you-> howAreYou
10、封装一个函数实现将一个url地址的参数转换为一个对象的形式  比如
http://172.16.254.254:8081/?userip=172.16.42.19&usermac=58696ce014e7
参数对象  {userip: “172.16.42.19”, usermac :” 58696ce014e7”}

选做：
1、 手动实现`find`方法
2、手动实现filter方法
3、手动封装some
4、手动封装every
 */

    //  1. 在数组原型上定义一个数组添加元素的方法，类似于push()
    // var arr=[1,2,3]
    // Array.prototype.arrPush=function(key){
    //     return this[this.length]=key
    // }
    // arr.arrPush(4)
    // console.log(arr);

    //2. 在数组原型上定义一个删除数组头部元素的方法，类似于shift()
    // var arr=[1,2,3]
    // Array.prototype.arrShift=function(key){
    //     return this.splice(0,1)
    // }
    // arr.arrShift()
    // console.log(arr);

    //3. 在数组原型上定义一个求数组最大值和最小值的方法
    // var arr = [1, 9, 3]
    // Array.prototype.arrMax = function () {
    //     let newArr = this.sort(function (a, b) { return a - b })
    //     return '最小值是：' + newArr[0] + '最大值是：' + newArr[newArr.length-1]
    // }

    // console.log( arr.arrMax());

    //6. 给数组原型添加检测一个元素在不在数组里面的方法
    // var arr = [1, 2, 3]
    // Array.prototype.arrIndexOf = function (x) {
    //     for (var i = 0; i < this.length; i++) {
    //         if (this[i] === x) {
    //             return i
    //         }
    //     }
    //     return -1
    // }

    // console.log(arr.arrIndexOf(1));

    //7. 给数组原型定义一个新的数组方法用于将数组小写字符转为大写字符
    // Array.prototype.arrUpdate=function (){
    //     let one=this.join().toUpperCase()  //'H,W,B'
    //     let two=one.split(',')  //['H','W','B']
    //     return two
    // }
    // var X=['h','w','b']
    // console.log(X.arrUpdate())

    //8. 通过原型方式，自定义一方法，实现字符串的截取功能，类似slice()
    /* slice原理：截取字符串,第一个参数是开始下标第二个参数是结束下标但不包含结束下标 */
    // Array.prototype.arrSlice=function(x,y){
    //     let str=''
    //     for(var i=x;i<y;i++){
    //         str+=this[i]
    //     }
    //     return str
    // }
    // var arr=['黄','文','波']
    // console.log(arr.arrSlice(0,3));  //substr(开始下标,截取长度length)

    // 9.封装一个函数实现以下格式字符串的转换比如：howAreYou->how-are-you ||   how-are-you-> howAreYou
    //    var arr='helloAreYou'
    //    var arr1='hello-are-you'
    //    function fun(str){
    //     // 首先将字符串转换为数组用一个变量来接收
    //     let a=str.split('')
    //     //定义一个正则表达式用来检测数组中的元素是否存在大写字符
    //     let reg=/[A-Z]/
    //     //遍历数组
    //     for(var i=0;i<a.length;i++){
    //         if(reg.test(a[i])){
    //             a[i]='-'+a[i].toLowerCase()
    //         }
    //     }

    //     return a.join('')
    //    }
    //    console.log(fun(arr))

    //10.封装一个函数实现将一个URL地址的参数转换为一个对象的形式
    //    let str = 'http://172.16.254.254.8081/?userip=172.16.42.19&usermac=58696ce014e7'

    //    function fun(str1){
    //     let arr=str.split('?')[1].split('&')
    //     let arr1=arr.map(item=>item.replace('=',':'))
    //     let arr2=arr1.map(item=>item.split(':'))
    //     let obj={}
    //     arr2.forEach(item=>{
    //         Object.defineProperty(obj,item[0],{
    //             value:item[1]
    //         })
    //     })
    //     return obj
    //    }
    //    console.log(fun(str))

    // 1. 在数组原型上定义一个数组添加元素的方法，类似于push()
    // Array.prototype.arrPush=function(key){
    //     return this[this.length]=key
    // }
    // var arr=[1,2]
    // arr.arrPush(5)
    // console.log(arr)

    // 2. 在数组原型上定义一个删除数组头部元素的方法，类似于shift()
    // Array.prototype.arrShift=function(){
    //     let str=this.join('')
    //     let newArr=str.slice(1)
    //     return newArr.split('')
    // }
    // var arr=[1,2,3]
    // console.log(arr.arrShift())

    // 3. 在数组原型上定义一个求数组最大值和最小值的方法
    // Array.prototype.arrShift=function(){
    //     this.sort(function(a,b){return a-b})
    //     return  '最大值是'+this[this.length-1]+'最小值是'+this[0]
    // }
    // var arr=[1,2,3]
    // console.log(arr.arrShift())

    // 6. 给数组原型添加检测一个元素在不在数组里面的方法
    // Array.prototype.arrShift=function(ele){
    //     for(var i=0;i<this.length;i++){
    //         if(this[i]===ele){
    //             return i
    //         }
    //     }
    //     return -1
    // }
    // var arr=[1,2,3]
    // console.log(arr.arrShift(9))

    // 7. 给数组原型定义一个新的数组方法用于将数组小写字符转为大写字符
    // Array.prototype.arrShift=function(){
    //     let str=this.join('').toUpperCase()
    //     return str.split('')
    // }
    // var arr=['a','b',3]
    // console.log(arr.arrShift())

    //8. 通过原型方式，自定义一方法，实现字符串的截取功能，类似slice()
    // Array.prototype.arrShift=function(x,y){
    //     let str=''
    //     for(var i=x;i<y;i++){
    //         str+=this[i]
    //     }
    //     return str
    // }
    // var arr=['a','b',3]
    // console.log(arr.arrShift(0,2))

    // 9、封装一个函数实现以下格式字符串的转换比如：howAreYou->how-are-you ||   how-are-you-> howAreYou
    // var arr = 'helloAreYou'
    // var arr1 = 'hello-are-you'
    // function fun(str) {
    //     let newArr = str.split('')
    //     let reg = /[A-Z]/
    //     for (var i = 0; i < newArr.length; i++) {
    //         if (reg.test(newArr[i])) {
    //             newArr[i] = '-' + newArr[i].toLowerCase()
    //         }
    //     }
    //     return newArr.join('')
    // }

    // console.log(fun(arr))

    //10.封装一个函数实现将一个URL地址的参数转换为一个对象的形式
    // let str = 'http://172.16.254.254.8081/?userip=172.16.42.19&usermac=58696ce014e7'
    // function fun(str1){
    //     let arr1=str1.split('?')[1].split('&')
    //     let arr2=arr1.map(item=>item.replace('=',':'))
    //     let arr3=arr2.map(item=>item.split(':'))
    //     let obj={}
    //     arr3.forEach(item=>{
    //         Object.defineProperty(obj,item[0],{
    //             value:item[1]
    //         })
    //     })
    //     return obj
    // }
    // console.log(fun(str))
</script>